//
//  OAuthViewController.swift
//  HMWeibo06
//
//  Created by apple on 15/5/12.
//  Copyright (c) 2015年 heima. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController, UIWebViewDelegate {
    
    let WB_Client_Id = "708836047"
    let WB_Redirect_Uri = "http://itheima.com"
    let WB_Client_Secret = "984e51cd1af83da211d6f63878928b5a"
    
    /// 计算属性，只有 getter，是 ReadOnly
    var webView: UIWebView {
        return view as! UIWebView
    }

    @IBAction func close() {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        loadAuthPage()
    }
    
    /**
    加载授权页面
    
    daoge10000@sina.cn
    */
    private func loadAuthPage() {
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=" + WB_Client_Id + "&redirect_uri=" + WB_Redirect_Uri
        let url = NSURL(string: urlString)!
        
        webView.loadRequest(NSURLRequest(URL: url))
    }

    /**
        1> https://api.weibo.com/ 继续加载
        2> 授权成功 回调地址开头 http://itheima.com/?code=8670711433faffa5d21a6a53b9df0095
        3> http://m.weibo.cn/reg/index
        4> http://login.sina.com.cn/sso/
        5> 用户取消授权 http://itheima.com/?error_uri=%
        
        分析：
        1> 如果 URL 以 https://api.weibo.com/ 开头就继续加载页面
        2> 如果 URL 以 http://itheima.com 开头，不用加载页面
        - 判断是否有 code，就是请求码
        3> 其他页面统一不加载
    */
    // 如果系统方法返回 Bool 返回true，都能工作正常
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        println(request.URL)
        // 取到 URL 的完整字符串
        let urlString = request.URL!.absoluteString!
        
        // 1. 如果是官方的页面继续加载
        if urlString.hasPrefix("https://api.weibo.com/") {
            return true
        }
        
        // 2. 判断 url 是否是设置的回调地址
        if !urlString.hasPrefix(WB_Redirect_Uri) {
            return false;
        }
        
        // 3. 代码执行到这里，就一定是回调的地址
        // query 可以过滤掉协议头和主机地址，所有的参数部分取出
        println("------" + request.URL!.query!)
        
        let codeStr = "code="
        let query = request.URL!.query!
        
        if query.hasPrefix(codeStr) {
            // 获取请求码
            let code = (query as NSString).substringFromIndex(codeStr.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
            println("验证码 " + code)
            
            loadAccessToken(code)
        } else {
            println("用户拒绝")
            close()
        }
    
        return false
    }
    
    deinit {
        println("88-－－－－－－－－－－－－")
    }
    
    private func loadAccessToken(code: String) {
        let params = ["client_id": WB_Client_Id,
            "client_secret": WB_Client_Secret,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": WB_Redirect_Uri, ]
        
        UserAccount.loadAccessToken(params) { (account, error) in
            
            if account != nil {
                // 设置全局变量
                sharedUserAccount = account
                println("账户信息 ---> \(account)")
                
                // 发送通知，前往 Welcome
                NSNotificationCenter.defaultCenter().postNotificationName(HMSwitchRootViewControllerNotification, object: "Welcome")
                
                // 一定注意一点，Modal 出来的视图控制器，千万不要忘记 dismiss
                self.dismissViewControllerAnimated(true, completion: nil)
                
                return
            }
            
            // 错误处理
            SVProgressHUD.showInfoWithStatus("您的网络不给力")
            // 为了调试用的
            println(error)
        }
    }
    
    // 开始加载页面
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    
    // 页面加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
}
